package com.cyzy.dto;


import java.util.HashMap;
import java.util.Map;

public class Result {

    // 响应是否成功的标志
    private Boolean success;

    // 响应状态码，通常用于标识不同类型的结果（如成功、失败等）
    private Integer code;

    // 响应信息，通常用于返回提示信息给前端用户
    private String message;

    // 响应数据，使用Map来存储键值对数据，可以灵活存储多种类型的数据
    private Map<String, Object> data = new HashMap<String, Object>();

    // 私有化构造器，外部不能直接实例化该类，必须通过静态方法创建对象
    private Result(){}

    // 静态方法，用于创建表示成功的响应对象
    public static Result ok(){
        Result result = new Result();  // 创建R对象
        result.setSuccess(true);  // 设置success字段为true，表示请求成功
        result.setCode(ResultCode.SUCCESS);  // 设置状态码为成功码，通常SUCCESS会定义为200或其他常见的成功码
        result.setMessage("成功");  // 设置提示信息为"成功"
        return result;  // 返回R对象
    }

    // 静态方法，用于创建表示错误的响应对象
    public static Result error(){
        Result result = new Result();  // 创建R对象
        result.setSuccess(false);  // 设置success字段为false，表示请求失败
        result.setCode(ResultCode.ERROR);  // 设置状态码为错误码，通常ERROR会定义为500或其他常见的错误码
        result.setMessage("失败");  // 设置提示信息为"失败"
        return result;  // 返回R对象
    }

    // 设置success字段，并返回当前对象（链式调用模式）
    public Result success(Boolean success){
        this.setSuccess(success);  // 设置success字段
        return this;  // 返回当前对象，支持链式调用
    }

    // 设置message字段，并返回当前对象（链式调用模式）
    public Result message(String message){
        this.setMessage(message);  // 设置message字段
        return this;  // 返回当前对象，支持链式调用
    }

    // 设置code字段，并返回当前对象（链式调用模式）
    public Result code(Integer code){
        this.setCode(code);  // 设置code字段
        return this;  // 返回当前对象，支持链式调用
    }

    // 向data Map中添加一对键值对，并返回当前对象（链式调用模式）
    public Result data(String key, Object value){
        this.data.put(key, value);  // 将指定的键值对放入data字段中
        return this;  // 返回当前对象，支持链式调用
    }

    // 替换整个data Map，并返回当前对象（链式调用模式）
    public Result data(Map<String, Object> map){
        this.setData(map);  // 设置data字段为传入的map
        return this;  // 返回当前对象，支持链式调用
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }
}
